//
//  XMUserAccountViewModel.swift
//  XMWeimo
//
//  Created by ios001 on 16/7/22.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

class XMUserAccountViewModel: NSObject {
    // 路径
    // MARK: - 别再写错了!!!!
//    let file = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentationDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("userAccount.archiver")
    let file = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("userAccount.archiver")
    // 全局访问点
    static let sharedTools: XMUserAccountViewModel = XMUserAccountViewModel()
    // 创建一个用户模型
    var userAccount: XMUserAccount?
    // 使用accessToken 是否过期 要时刻和当前使用的日期对比才准确,所以要用计算型属性
    var accessToken: String?{
        // 代表用户有accessToken
        if userAccount?.access_token != nil{
            // 看是否过期
            // 当前保存的日期和当前日期对比,如果为降序 为未过去
            // MARK: - 这里写成升序 所以判断一直有问题,导致后面逻辑都没实现!!!
//            if userAccount?.expires_Date?.compare(NSDate()) == NSComparisonResult.OrderedAscending {
            if userAccount?.expires_Date?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
                return userAccount?.access_token
            }else{
                // 代表已经过期
                return nil
            }
        }else{
            // 代表没有acceToken
            // 代表用户没有登录,或者没有保存数据
            return nil
        }
    }
    
    // 判断用户是否登录
    // 通过accessToken 是否为nil 为nil 为未登录
    var isLogin: Bool {
        return accessToken != nil
    }
    
    override init() {
        super.init()
        userAccount = getUserAccount()
    }
}

// MARK: - 归档和解档
extension XMUserAccountViewModel{
    // 保存对象
    func saveUserAccount(userAccount: XMUserAccount){
        // 为了解决第一次的userAccount的bug
        self.userAccount = userAccount
        // 保存对象
        NSKeyedArchiver.archiveRootObject(userAccount, toFile: file)
    }
    // 获取对象
    func getUserAccount() -> XMUserAccount?{
        // 获取对象
        let result = NSKeyedUnarchiver.unarchiveObjectWithFile(file) as? XMUserAccount
        return result
    }
}

// MARK: - 请求数据
extension XMUserAccountViewModel{
    // 请求userAccount
    func loadUserAccount(code: String, isSuccess:(isSucc: Bool)->()){
        XMNetworkTools.shardTools.oauthLoadUserAccount(code, success: { (response) -> () in
            //             当在guard 或者 if let中,使用as 一般情况下 都是使用 as?
            // 判断response是否为nil,而且是否可以转成字典
            guard let res = response as? [String: AnyObject] else{
                isSuccess(isSucc: false)
                return
            }
            // 字典转模型
            let userAccount = XMUserAccount(dict: res)
//            self.getUserInfo(userAccount)
            self.loadUserInfo(userAccount, isSuccess: isSuccess)
            }) { (error) -> () in
                print("请求失败\(error)")
                isSuccess(isSucc: false)
        }
    }
    // 请求用户信息
    func loadUserInfo(userAccount: XMUserAccount, isSuccess:(isSucc: Bool)->()){
        XMNetworkTools.shardTools.oauthLoadUserInfo(userAccount, success: { (response) -> () in
            // 当在guard 或者 if let中,使用as 一般情况下 都是使用 as?
            // 判断response是否为nil,而且是否可以转成字典
            guard let res = response as? [String: AnyObject] else{
                isSuccess(isSucc: false)
                return
            }
            // 因为当前的screenname 和 avatar_large 本来就是可选值,所以在as的时候,只用as?
            // 给其userAccount身上两个为nil的属性赋值
            userAccount.screen_name = res["screen_name"] as? String
            userAccount.avatar_large = res["avatar_large"] as? String
//            print(userAccount)
            // 通过归档保存数据
            self.saveUserAccount(userAccount)
            // MARK; - 这里没写导致回调没走 通知没走 就代表火苗逻辑都没实现!!!!
            isSuccess(isSucc: true)
            }) { (error) -> () in
                print("请求失败\(error)")
                isSuccess(isSucc: true)
        }

    }
}
